package com.shujia.wyh.day07.ketang;

/*
        冒泡排序算法
 */
public class BubbleDemo {
    public static void main(String[] args) {
        //定义一个数组，即将要被排序
        int[] arr = {21, 32, 43, 1, 23, 34, 100, 56, 72, 19};
        System.out.println("排序之前：");
        printArray(arr);
        System.out.println("==========================================");

        int[] arr2 = bubbleSort(arr);

        System.out.println("冒泡排序后：");
        //输出排序后的结果
        printArray(arr2);

    }

    /**
     * 定义一个冒泡排序的方法
     * 返回值类型： int[]
     * 参数列表：int[] arr
     * <p>
     * 假设我有元素为5个的数组，length=5
     * <p>
     * 第一次比较：
     * 第1个(0)与第2个(1)
     * 第2个(1)与第3个(2)
     * 第3个(2)与第4个(3)
     * 第4个(3)与第5个(4)
     * <p>
     * 总共比较4次，length-1
     * 所以需要两个循环，外层for循环控制比较第多少次
     * 内循环，两两比较
     */
    public static int[] bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            System.out.println("比较了第" + (i + 1) + "轮，这一轮排序后的结果为：");
            printArray(arr);

        }
        return arr;
    }


    /**
     * 封装打印的数组的方法
     */
    public static void printArray(int[] array) {
        for (int i = 0; i < array.length; i++) {
            if (i == 0) {
                System.out.print("[" + array[i] + ",");
            } else if (i == array.length - 1) {
                System.out.print(array[i] + "]\n");
            } else {
                System.out.print(array[i] + ",");
            }
        }
    }
}
